package com.sromku.bugsnag.dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import com.sromku.bugsnag.model.Error; import com.sromku.bugsnag.model.Event; import com.sromku.bugsnag.model.ExceptionDetails; import com.sromku.bugsnag.utils.Utils; public class BugDetailsDialog extends TitleAreaDialog { private Error error; private Event event; public BugDetailsDialog(Shell parentShell, Error error) { super(parentShell); // TODO - think how to manage multiple events. // Currently the first one will be presented. if (error.events != null && error.events.size() > 0) { event = error.events.get(0); } this.error = error; } @Override public void create() { super.create(); setTitle("Report: " + error.id); setMessage(error.exception, IMessageProvider.ERROR); } @Override protected Control createDialogArea(Composite parent) { Composite area = (Composite) super.createDialogArea(parent); Composite container = new Composite(area, SWT.NONE); container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); // set the internal layout of the container GridLayout layout = new GridLayout(1, false); container.setLayout(layout); createStackTrace(container); return area; } private void createStackTrace(Composite container) { Label lbtStacktrace = new Label(container, SWT.NONE); lbtStacktrace.setText("Stacktrace"); GridData dataStacktrace = new GridData(); dataStacktrace.grabExcessHorizontalSpace = true; dataStacktrace.grabExcessVerticalSpace = true; dataStacktrace.minimumWidth = 590; dataStacktrace.minimumHeight = 200; dataStacktrace.horizontalAlignment = GridData.FILL_BOTH; dataStacktrace.verticalAlignment = GridData.FILL_BOTH; Text textStacktrace = new Text(container, SWT.MULTI | SWT.READ_ONLY | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); ExceptionDetails[] exceptions = event.exceptions; if (exceptions != null && exceptions.length > 0) { // TODO we will show stacktrace from last exception in the array // Need to check how to manage all of them TBD textStacktrace.setText(Utils.getWrappedString(exceptions[exceptions.length - 1])); } textStacktrace.setLayoutData(dataStacktrace); } @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, "Close", true); } @Override protected boolean isResizable() { return true; } @Override protected Point getInitialSize() { return new Point(600, 400); } @Override protected void okPressed() { super.okPressed(); } }